package com.huanxing.cloud.miniapp.api.feign;

import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.huanxing.cloud.common.core.constant.SecurityConstants;
import com.huanxing.cloud.common.core.constant.ServiceNameConstants;
import com.huanxing.cloud.common.core.util.Result;
import com.huanxing.cloud.miniapp.api.dto.WxUserLoginReqDTO;
import com.huanxing.cloud.miniapp.api.dto.WxUserReqDTO;
import com.huanxing.cloud.miniapp.api.entity.WxUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 微信用户feign接口
 *
 * @author lijx
 * @date 2022/6/10
 */
@FeignClient(contextId = "remoteWeiXinUserService", value = ServiceNameConstants.MINIAPP_WEIXIN_SERVICE)
public interface RemoteWeiXinUserService {

	/**
	 * 微信静默登录
	 *
	 * @author lijx
	 * @date 2022/6/16
	 * @param wxUserLoginReqDTO
	 * @return: com.huanxing.cloud.common.core.util.Result<com.huanxing.cloud.miniapp.common.entity.WxUser>
	 */
	@PostMapping("/app/wxuser/ma/login")
	Result<WxUser> maLogin(@RequestBody WxUserLoginReqDTO wxUserLoginReqDTO,
			@RequestHeader(SecurityConstants.SOURCE) String source);

	/**
	 * 微信解密手机号
	 *
	 * @author lijx
	 * @date 2022/6/16
	 * @param wxUserLoginReqDTO
	 * @return: com.huanxing.cloud.common.core.util.Result<cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo>
	 */
	@PostMapping("/app/wxuser/ma/phone")
	Result<WxMaPhoneNumberInfo> getPhoneNumberInfo(@RequestBody WxUserLoginReqDTO wxUserLoginReqDTO,
			@RequestHeader(SecurityConstants.SOURCE) String source);

	/**
	 * 绑定商城用户
	 * @param wxUserReqDTO 微信用户入参
	 * @return Boolean
	 */
	@PostMapping("/app/wxuser/ma/bind")
	Result<Boolean> bindUserId(@RequestBody WxUserReqDTO wxUserReqDTO,
			@RequestHeader(SecurityConstants.SOURCE) String source);

	/**
	 * 解绑商城用户
	 * @param wxUserReqDTO 微信用户入参
	 * @return Boolean
	 */
	@PostMapping("/app/wxuser/ma/unbind")
	Result<Boolean> unbindUserId(@RequestBody WxUserReqDTO wxUserReqDTO,
			@RequestHeader(SecurityConstants.SOURCE) String source);

	/**
	 * 根据微信id获取微信用户信息
	 * @param id 微信id
	 * @param source 来源
	 * @return WxUser
	 */
	@GetMapping("/app/wxuser/{id}")
	Result<WxUser> getInnerById(@PathVariable("id") String id, @RequestHeader(SecurityConstants.SOURCE) String source);

}
